/**
 * C++中的函数
   1 将函数在主函数之前进行声明，在main函数之后进行定义
   2 函数的返回值可以通过声明的返回值带回，也可以通过引用类型参数带回
   3 数组可以作为参数，但不可以作为返回值
   4 数组作为参数时，形参的变化会引起实参的变化
 */
#include <iostream>
#define func_01 func_01

void change(char arr[5]);
int add1(int x,int y);
void add(int a,int b,int &sum);
int max3(int a,int b,int c);
int max2(int a,int b);
int fac(int n);//阶乘计算，递归调用

int func_01(){
    int x=1,y=2,sum;
    add(x,y,sum);
    add1(x,y);
    char arr[5] = {'a','b','c','d','e'};
    change(arr);
    printf("x=%d,y=%d,x+y=%d\n",x,y,sum);
    printf("arr[2]=%c\n",arr[2]);

    //计算3个数的最大值
    printf("max=%d\n",max3(1,2,3));

    //计算阶乘
    int n=5;
    printf("fac(%d)=%d\n",n,fac(n));
    return 0;
}

int add1(int a,int b){
    return a+b;
}
void change(char arr[5]){
    arr[2]='3';
}
void add(int a,int b,int &sum){
    sum=a+b;
}
int max2(int a,int b){
    return a>b?a:b;
}
int max3(int a,int b,int c){
    return a>max2(b,c)?a:max2(b,c);
}
int fac(int n){
    if(n==0) return 1;
    else return n*fac(n-1);
}